package Offer2018.java8;

import org.junit.Test;

import java.sql.SQLOutput;
import java.util.Comparator;
import java.util.function.Consumer;

public class LambdaTest {


    @Test
    public void test1() {
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello Lambda!");
            }
        };
        //Lambda表达式
        Runnable r2 = () -> System.out.println("Hello Lambda!");

        r1.run();
        r2.run();
    }

    @Test
    public void test2(){
        //语法格式一:无参，无返回值
        Runnable r1 = ()->{ System.out.println("Hello Lambda!"); };

        //语法格式二:Lambda 需要一个参数，但是没有返回值。
        Consumer<String> con1 = (String str)->{ System.out.println(str); };

        //语法格式三:数据类型可以省略，因为可由编译器推断得出，称为“类型推断”
        Consumer<String> con2 = (str)->{ System.out.println(str); };

        //语法格式四:Lambda 若只需要一个参数时，参数的小括号可以省略
        Consumer<String> con3 = str->{ System.out.println(str); };

        //语法格式五:Lambda 需要两个或以上的参数，多条执行语句，并且可以有返回值
        Comparator<Integer> com1 = (x,y)->{
            System.out.println("实现函数式接口方法！");
            return Integer.compare(x,y);
        };

        //语法格式六:当 Lambda 体只有一条语句时，return 与大括号若有，都可以省略
        Comparator<Integer> com2 = (x,y)->Integer.compare(x,y);

    }
}
